In virtualized computer systems, in particular ones configured with clusters of host computers each having one or more virtual machines (VMs) running therein and system software for the VMs (commonly referred to as a hypervisor), management of input/output operations (I/O) has been a challenge. Traditional storage devices often struggle to keep up with the flow of storage I/O requests generated by hundreds or even thousands of VMs running in clusters of host computers.
Conventional techniques for solving this problem include the use of storage devices with specially designed caching mechanisms, and multi-tiered storage devices with one or more higher speed storage devices arranged closer to the host computers. These systems may be adequate in handling the flow of storage I/O request but they can be costly and their implementation complex, and do not scale well with the number of VM running in clusters of host computers for such reasons. Also, it is generally the case that these systems are designed to handle peak workloads so as to meet service level agreements (SLAs) specified for them and, as a result, are under-utilized for long periods of time.